﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;
using System.Data.SqlClient;

namespace DataLayer
{
    public static class DatBeneficiario
    {
        public static dsBoleto.BeneficiarioDataTable getBeneficiarios()
        {
            SqlCommand este = Util.SQLCommandBuild("BeneficiariosGet");
            List<string> Tablas = new List<string>();

            Tablas.Add("Beneficiario");

            dsBoleto rta = Util.SelectSPtoDatasetSolve(este, Tablas.ToArray());
            return rta.Beneficiario;
        }

        public static dsBoleto.BeneficiarioDataTable getBeneficiariosByFilter(string razonSocial, int idRubro, int idPostnet, string calle, int numero, int piso, string depto, int habilitado)
        {
            List<Util.DBParameter> parameters = new List<Util.DBParameter>();

            Util.DBParameter pRazonSoc;
            pRazonSoc.dbType = System.Data.DbType.String;
            pRazonSoc.parameterName = "@RazonSocial";
            pRazonSoc.value = razonSocial;

            Util.DBParameter pIdRubro;
            pIdRubro.dbType = System.Data.DbType.Int32;
            pIdRubro.parameterName = "@IdRubro";
            pIdRubro.value = idRubro;

            Util.DBParameter pIdPostnet;
            pIdPostnet.dbType = System.Data.DbType.Int32;
            pIdPostnet.parameterName = "@IdPostnet";
            pIdPostnet.value = idPostnet;

            Util.DBParameter pCalle;
            pCalle.dbType = System.Data.DbType.String;
            pCalle.parameterName = "@DirCalle";
            pCalle.value = calle;
            
            Util.DBParameter pNumero;
            pNumero.dbType = System.Data.DbType.Int32;
            pNumero.parameterName = "@DirNro";
            pNumero.value = numero;
            
            Util.DBParameter pPiso;
            pPiso.dbType = System.Data.DbType.Int32;
            pPiso.parameterName = "@DirPiso";
            pPiso.value = piso;

            Util.DBParameter pDepto;
            pDepto.dbType = System.Data.DbType.String;
            pDepto.parameterName = "@DirDepto";
            pDepto.value = depto;

            Util.DBParameter estado;
            estado.dbType = System.Data.DbType.Int32;
            estado.parameterName = "@Habilitado";
            estado.value = habilitado;

            parameters.Add(pRazonSoc);
            parameters.Add(pIdRubro);
            parameters.Add(pIdPostnet);
            parameters.Add(pCalle);
            parameters.Add(pNumero);
            parameters.Add(pPiso);
            parameters.Add(pDepto);
            parameters.Add(estado);

            SqlCommand este = Util.SQLCommandBuild("BeneficiariosGet", parameters);
            List<string> Tablas = new List<string>();

            Tablas.Add("Beneficiario");

            dsBoleto rta = Util.SelectSPtoDatasetSolve(este, Tablas.ToArray());
            return rta.Beneficiario;
        }

        //para dar de baja un beneficiario
        public static bool updateBeneficiario(int idBeneficiario, int estado)
        {
            List<Util.DBParameter> parameters = new List<Util.DBParameter>();

            Util.DBParameter pIdBenef;
            pIdBenef.dbType = System.Data.DbType.Int32;
            pIdBenef.parameterName = "@IdBeneficiario";
            pIdBenef.value = idBeneficiario;

            Util.DBParameter pEstado;
            pEstado.dbType = System.Data.DbType.Int32;
            pEstado.parameterName = "@Habilitado";
            pEstado.value = estado;

            parameters.Add(pIdBenef);
            parameters.Add(pEstado);

            try
            {
                Util.SQLCommandBuild("BeneficioarioUpdate", parameters).ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("error{0}", ex.Message);
                return false;
            }
        }

        public static int createBeneficiario(string razonSocial, int idRubro, string calle, int numero, int piso, string depto)
        {
            List<Util.DBParameter> parameters = new List<Util.DBParameter>();

            Util.DBParameter pRazonSoc;
            pRazonSoc.dbType = System.Data.DbType.String;
            pRazonSoc.parameterName = "@RazonSocial";
            pRazonSoc.value = razonSocial;

            Util.DBParameter pIdRubro;
            pIdRubro.dbType = System.Data.DbType.Int32;
            pIdRubro.parameterName = "@IdRubro";
            pIdRubro.value = idRubro;

            Util.DBParameter pCalle;
            pCalle.dbType = System.Data.DbType.String;
            pCalle.parameterName = "@DirCalle";
            pCalle.value = calle;

            Util.DBParameter pNumero;
            pNumero.dbType = System.Data.DbType.Int32;
            pNumero.parameterName = "@DirNro";
            pNumero.value = numero;

            if (piso != 0)
            {
                Util.DBParameter pPiso;
                pPiso.dbType = System.Data.DbType.Int32;
                pPiso.parameterName = "@DirPiso";
                pPiso.value = piso;
                parameters.Add(pPiso);
            }

            if (!String.IsNullOrEmpty(depto))
            {
                Util.DBParameter pDepto;
                pDepto.dbType = System.Data.DbType.String;
                pDepto.parameterName = "@DirDepto";
                pDepto.value = depto;
                parameters.Add(pDepto);
            }

            parameters.Add(pRazonSoc);
            parameters.Add(pIdRubro);
            parameters.Add(pCalle);
            parameters.Add(pNumero);

            SqlCommand miCommand = Util.SQLCommandBuild("BeneficiarioInsert", parameters);

            return int.Parse(miCommand.ExecuteScalar().ToString());
        }

        private static Util.DBParameter getQueryUnion(int idBeneficiario, List<int> listPostnets)
        {
            StringBuilder sbSelect = new StringBuilder();
            sbSelect.Append("(");
            for (int i = 0; i < listPostnets.Count; i++)
            {
                sbSelect.Append("(SELECT ");
                sbSelect.Append(listPostnets[i]);
                sbSelect.Append(" IdPostnet, ");
                sbSelect.Append(idBeneficiario);
                sbSelect.Append(" IdBeneficiario) ");
                if (i != listPostnets.Count - 1)
                {
                    sbSelect.Append("UNION ");
                }
            }
            sbSelect.Append(")");
            Util.DBParameter pQuery;
            pQuery.dbType = System.Data.DbType.String;
            pQuery.parameterName = "@QueryUnions";
            pQuery.value = sbSelect.ToString();

            return pQuery;
        }

        public static bool updateBeneficiario(int idBeneficiario, string razonSocial, int idRubro, string calle, int numero, int piso, string depto)
        {
            List<Util.DBParameter> parameters = new List<Util.DBParameter>();

            Util.DBParameter pIdBeneficiario;
            pIdBeneficiario.dbType = System.Data.DbType.Int32;
            pIdBeneficiario.parameterName = "@IdBeneficiario";
            pIdBeneficiario.value = idBeneficiario;

            Util.DBParameter pRazonSoc;
            pRazonSoc.dbType = System.Data.DbType.String;
            pRazonSoc.parameterName = "@RazonSocial";
            pRazonSoc.value = razonSocial;

            Util.DBParameter pIdRubro;
            pIdRubro.dbType = System.Data.DbType.Int32;
            pIdRubro.parameterName = "@IdRubro";
            pIdRubro.value = idRubro;

            Util.DBParameter pCalle;
            pCalle.dbType = System.Data.DbType.String;
            pCalle.parameterName = "@DirCalle";
            pCalle.value = calle;

            Util.DBParameter pNumero;
            pNumero.dbType = System.Data.DbType.Int32;
            pNumero.parameterName = "@DirNro";
            pNumero.value = numero;

            if (piso != 0)
            {
                Util.DBParameter pPiso;
                pPiso.dbType = System.Data.DbType.Int32;
                pPiso.parameterName = "@DirPiso";
                pPiso.value = piso;
                parameters.Add(pPiso);
            }

            if (!String.IsNullOrEmpty(depto))
            {
                Util.DBParameter pDepto;
                pDepto.dbType = System.Data.DbType.String;
                pDepto.parameterName = "@DirDepto";
                pDepto.value = depto;
                parameters.Add(pDepto);
            }

            parameters.Add(pIdBeneficiario);
            parameters.Add(pRazonSoc);
            parameters.Add(pIdRubro);
            parameters.Add(pCalle);
            parameters.Add(pNumero);

            try
            {
                Util.SQLCommandBuild("BeneficioarioUpdate", parameters).ExecuteNonQuery();
                return true;
            }
            catch (Exception ex)
            {
                Console.WriteLine("error{0}", ex.Message);
                return false;
            }
        }

        public static dsBoleto.BeneficiarioDataTable getBeneficiariosByRazonSocial(string razonSocial)
        {
            Util.DBParameter pRZ;
            pRZ.dbType = System.Data.DbType.String;
            pRZ.parameterName = "@RazonSocial";
            pRZ.value = razonSocial;

            SqlCommand este = Util.SQLCommandBuild("BeneficiariosGetByRazonSocial", pRZ);
            List<string> Tablas = new List<string>();

            Tablas.Add("Beneficiario");

            dsBoleto rta = Util.SelectSPtoDatasetSolve(este, Tablas.ToArray());
            return rta.Beneficiario;
        }
    }
}
